package com.springweb.unit5.controller;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.springweb.unit5.dao.SpitterRepository;
import com.springweb.unit5.domain.Spitter;
@Controller
@RequestMapping(value="spitter")
public class SpitterController {
	
	@Autowired
	private SpitterRepository spitterRepository;

	/**
	 * 
	 * Description: 跳转到spitter注册页面 
	 *
	 * @return
	 * @Author zhangxujun
	 * @Create Date: 2017年11月15日 下午2:10:22
	 */
	@RequestMapping(value="registerForm", method=RequestMethod.GET)
	public String registerForm() {
		return "unit5/registerForm";
	}
	
	/**
	 * 
	 * Description: spitter注册
	 *
	 * @return
	 * @Author zhangxujun
	 * @Create Date: 2017年11月15日 下午2:28:48
	 */
	@RequestMapping(value="register", method=RequestMethod.POST)
	public String register(RedirectAttributes model, @Valid Spitter spitter, Errors errors) {
		if (errors.hasErrors()) {
			return "unit5/registerForm";
		}
		spitterRepository.save(spitter);
		model.addAttribute("userName", spitter.getUserName());
		model.addAttribute("id", spitter.getId());
		// Spring提供了通过RedirectAttributes设置flash属性
		// 调用了addFlashAttribute()方法，并将spitter作为key，Spitter对象作为值。
		// 在重定向执行之前，所有的flash属性都会复制到会话中。在重定向后，存在会话中的flash属性会被取出，并从会话转移到模型之中。处理重定向的方法就能从模型中访问Spitter对象了，就像获取其他的模型对象一样
		model.addFlashAttribute("spitter", spitter);
		return "redirect:/spitter/spitterByUserName/{userName}";
		// /spitter/spitterByUserName/userName?id=id
	}
	
	/**
	 * 
	 * Description: 根据用户名获取spitter对象
	 *
	 * @param model
	 * @param userNmae
	 * @return
	 * @Author zhangxujun
	 * @Create Date: 2017年11月15日 下午2:41:02
	 */
	@RequestMapping(value="spitterByUserName/{userName}", method=RequestMethod.GET)
	public String spitterByUserName(Model model, @PathVariable("userName") String userName) {
		if (!model.containsAttribute("spitter")) {
			Spitter spitter = spitterRepository.findByUserName(userName);
			model.addAttribute("spitter", spitter);
		}
		return "unit5/spitter";
	}
}
